經過了前面幾天的步驟, 已經算是走過一遍本機開發到交付的流程了,
接下來再依照團隊推上k8s的流程新增好對應的deployment.yaml,
服務架上共用環境之後就會開始進行畫面介接跟規格確認, 異動跟新增的需求也會開始隨之而來。
趁著這個空檔可以檢視一下API接口執行時間: 首先先評估API被呼叫的平均頻率大部分會落在哪裡, 然後再評估API被呼叫的頻率高峰次數會落在哪裡, 最後是高峰頻率乘上3~5倍來測試, 透過調整呼叫API的頻率來觀察API執行回應時間是否在可接受的範圍內。
這邊我會寫個簡單的可以看出執行時間差異的測試程式:
package main
import (
"context"
"fmt"
"log"
"sync"
"time"
coconut "github.com/evelynocean/coconut/pb"
"github.com/go-redis/redis"
"google.golang.org/grpc"
)
func main() {
// 連線到遠端 gRPC 伺服器。
conn, err := grpc.Dial("localhost:32100", grpc.WithInsecure())
if err != nil {
log.Fatalf("conn 連線失敗:%v", err)
}
defer conn.Close()
coco := coconut.NewCoconutClient(conn)
n := 1000
var sum float64
req := &coconut.PointsRequest{
Level_1: "aaa",
Level_2: "bbb",
Level_3: "ccc",
}
wait := &sync.WaitGroup{}
for i := 0; i < n; i++ {
wait.Add(1)
go func() {
defer func() {
wait.Done()
}()
start := time.Now()
_, _ = coco.UpdatePoints(context.Background(), req)
sum += time.Since(start).Seconds()
}()
}
wait.Wait()
fmt.Println("total count:", n, ", avg execute_time:", (sum / float64(n)))
}
func newRedisConnection() (client *redis.Client, err error) {
client = redis.NewClient(&redis.Options{
Addr: "127.0.0.1:6379",
DB: 2,
})
_, err = client.Ping().Result()
return
}
total count: 10 , avg execute_time: 0.04420415439999999
total count: 100 , avg execute_time: 0.14994730453000005
total count: 1000 , avg execute_time: 1.034294797929
看起來隨著併發打API的次數拉高, API平均回應時間也跟著拉長了,
可以嘗試針對這支API的內容進行調整, 看看是否能縮短執行時間。
今天就先到這裡, 明天再來調校程式!